/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import modelo.total;
import org.jgap.FitnessFunction;
import org.jgap.IChromosome;
import org.jgap.impl.IntegerGene;

/**
 *
 * @author Jorge
 */

//Creación de la clase Aptitud (Fitness)
public class EquipoFitnessFuncion extends FitnessFunction{
    List equipos = new ArrayList();
    List nombre = new ArrayList();

    public EquipoFitnessFuncion(List equipos, List nombre) {
        this.equipos = equipos;
        this.nombre = nombre;
    }
    
    protected double evaluate(IChromosome chromosome) {
        double score = 0;
        //double imdbScore = 0;

        List dups = new ArrayList();
        int badSolution = 1;

        for (int i = 0; i < chromosome.size(); i++) {

            IntegerGene agene = (IntegerGene) chromosome.getGene(i);
            int index = (Integer) chromosome.getGene(i).getAllele();
            if (dups.contains(index)) {
                badSolution = 0;
            } else {
                dups.add(index);
            }

            total seleccion = (total) equipos.get(index);
            //Score es la puntuacion de cada individuo
            double genreScore = getGenreScore(seleccion);
            if (genreScore == 0) {
                badSolution = 0;
            }
            score = (score + seleccion.getScore()) + (genreScore);
        }
        return (score * badSolution);
    }

    private double getGenreScore(total e) {
        double genreScore = 0;
        Iterator it = this.nombre.iterator();

        while (it.hasNext()) {
            String genre = (String) it.next();
            if (e.getNombre().contains(genre)) {
                genreScore = genreScore + 1;
            }
        }
        return genreScore;
    }

}
